package string;

import java.util.ArrayList;
import java.util.List;

/**
 * @author kaho
 * @since 2020/12/22
 */
public class _6_Z字形变换 {

    /**
     *
     将一个给定字符串根据给定的行数，以从上往下、从左到右进行 Z 字形排列。

     比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时，排列如下：

     L   C   I   R
     E T O E S I I G
     E   D   H   N
     之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："LCIRETOESIIGEDHN"。

     请你实现这个将字符串进行指定行数变换的函数：

     string convert(string s, int numRows);
     * @param s
     * @param numRows
     * @return
     */
    public static String convert(String s, int numRows) {
        if(numRows < 2) return s;
        List<StringBuilder> rows = new ArrayList<>();
        for(int i = 0; i < numRows; i++) rows.add(new StringBuilder());
        int i = 0, flag = -1;
        for(char c : s.toCharArray()) {
            rows.get(i).append(c);
            if(i == 0 || i == numRows -1){
                flag = - flag;
            }
            i += flag;
        }
        StringBuilder res = new StringBuilder();
        for(StringBuilder row : rows) {
            res.append(row);
        }
        return res.toString();
    }

    public static void main(String[] args) {
        String leetcode = convert1("AB", 1);
    }

    public static String convert1(String s, int numRow){
        if (numRow<2) {
            return s;
        }
        List<StringBuilder> sbs = new ArrayList<>();
        for (int i = 0; i < numRow; i++) {
            sbs.add(new StringBuilder());
        }
        int i = 0, flag = -1;
        for (char c : s.toCharArray()) {
            sbs.get(i).append(c);
            if (i == 0 || i == numRow - 1) {
                flag = -flag;
            }
            i+=flag;
        }
        StringBuilder r = new StringBuilder();
        for (StringBuilder sb : sbs) {
            r.append(sb.toString());
        }
        return r.toString();
    }

}
